﻿// Sheego.Service.X400
// Copyright(C) 2015 Schwab Versand GmbH
//
// This source file is subject to the Microsoft Public License(Ms-PL).
// http://www.opensource.org/licenses/ms-pl.html
// All other rights reserved.
using Sheego.Service.X400.Job.Shared.BO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sheego.Service.X400.Job.Shared
{
    public interface IFileManager
    {




        /// <summary>
        /// Löscht im Temporaeren Verzeichnis 
        /// - Command.txt
        /// - Response.txt
        /// - MessagesFiles (.hdr, .001, .002, ...)
        /// </summary>
        void CleanupTempDirectory();

        /// <summary>
        /// Erzeugt eine Command-Datei mit dem Inhalt des Kommandos
        /// </summary>
        /// <param name="Command">Kommando</param>
        void CreateCommandTextFile(String Command);

        /// <summary>
        /// Hängt eine Zeile mit der neuen MessageId an die Cache Datei 
        /// </summary>
        /// <param name="MessageId">neune MessageId</param>
        void AppendCacheFile(String MessageId);

        /// <summary>
        /// Hängt eine Zeile mit der LogMessage an die Log Datei 
        /// </summary>
        /// <param name="Key">INFO,ERROR, ...</param>
        /// <param name="dateTime">Zeit und Datum des Logeintrags</param>
        /// <param name="Message">Log-Eintrag</param>
        void AppendLogFile(string Key, DateTime dateTime, string Message);

        /// <summary>
        /// Liest die Response-Datei
        /// </summary>
        /// <returns>Zeilen aus Response-Datei</returns>
        IList<String> ReadResponseTextFile();

        /// <summary>
        /// Liest die Cache-Datei
        /// </summary>
        /// <returns>Zeilen aus Response-Datei</returns>
        IList<String> ReadCacheFile();

        /// <summary>
        /// Listet alle Dateien zu einer MessageId auf
        /// </summary>
        /// <param name="MessageId">MessageId</param>
        /// <returns>Liste der Dateinamen</returns>
        IList<String> ListFileNamesForMessageId(String MessageId);

        /// <summary>
        /// Prüfe den ContentType der Datei
        /// EDIFACT - application/edifact 
        /// </summary>
        /// <param name="FileName"></param>
        /// <returns>Mimetype + Subtyp</returns>
        IContentType ProbeContentType(byte[] buffer);

        /// <summary>
        /// Liest den Inhalt der angegeben Datei 
        /// </summary>
        /// <param name="FileName">Dateiname</param>
        /// <returns>Inhalt der Datei</returns>
        byte[] ReadFile(String FileName);

        /// <summary>
        /// Liest den Inhalt der angegeben Datei als Text
        /// </summary>
        /// <param name="FileName">Dateiname</param>
        /// <returns>Zeilen der Datei</returns>
        IList<String> ReadTextFile(String FileName);


        /// <summary>
        /// Schreibt den Inhalt der angegeben Datei 
        /// </summary>
        /// <param name="FilePath">Pfad der Datei</param>
        /// <param name="buffer">Inhalt der Datei</param>
        void WriteFile(String FilePath, byte[] buffer);

        /// <summary>
        /// Schreibt den Text-Inhalt der angegeben Datei 
        /// </summary>
        /// <param name="FilePath">Pfad der Datei</param>
        /// <param name="buffer">Inhalt der Datei</param>
        void WriteTextFile(string FilePath, string content);

        /// <summary>
        /// Erzeugt ein uniques, eindeutiges zeitbasiertes Pattern zur Verwendung im Dateinamen
        /// </summary>
        /// <param name="time">Zeit</param>
        /// <returns>Pattern</returns>
        String CreateUniquePattern(DateTime time);

        /// <summary>
        /// Erzeugt einen Eindeutigen Dateinamen der mit PostFileName endet. abc.txt =>  72635abc.txt
        /// </summary>
        /// <param name="PostFileName">Ende des Dateinamen </param>
        /// <returns>Pfad der Datei</returns>
        String CreateTempFileName(string PostFileName);


    }
}
